<?php
error_reporting(E_ALL^E_NOTICE);
set_time_limit(1000);
if (!defined('MINI_RUN')) exit();
header('Content-Type:text/html;charset=utf-8');

//网站根目录物理路径
define('MINI_PATH', substr(dirname(__FILE__), 0,-5));
session_start();
require_once MINI_PATH.'admin/core/MysqlPDO.class.php';
require_once MINI_PATH.'admin/core/Mini_Admin.class.php';
require_once MINI_PATH.'admin/core/Mini_Class.class.php';

/**
 * CodePlayer核心配置及工具类
 * @author Ready
 * @since 2012-4-11
 */
class Mini{	

	//网站名称
	const NAME = 'CodePlayer';	
	
	//网站根目录URL(不含http://协议头)
	const URL = 'localhost/PHP/CodePlayer/';

	// CSS文件链接(包含&lt;link /&gt;标签)
	const ADMIN_CSS = '<link rel="stylesheet" type="text/css" href="./gzip.php?v=3&f=admin.css" />';

	 // JQuery文件链接(包含&lt;script/&gt;标签)
	const JQUERY_JS = '<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>';
	
	// admin.js文件链接(包含&lt;script/&gt;标签)
	const ADMIN_JS = '<script type="text/javascript" src="./gzip.php?v=1&f=admin.js"></script>';
	
	//执行变更数据的Ajax操作的链接(相对路径)	 
	const AJAX_SET = '"./ajax/action.php"';
	
	//执行获取数据的Ajax操作的链接(相对路径)	
	const AJAX_GET = '"./ajax/ajax.php"';

	/**
	 * 输出提示信息并跳转到指定页面
	 * @param string $message 提示信息
	 * @param string $forward 跳转网址(默认跳转上一页)
	 */
	public static function printMessage($message = '', $forward = 'back'){
		define('MESSAGE_RUN', true);
		if ( empty($message) )
			$message = '发生未知错误，请联系管理员！';	
		if (empty($forward) || $forward == 'back'){
			$forward_js = 'history.back()';
			$forward = 'javascript:history.back()';
		}else {
			$forward_js = 'self.location.href="'.$forward.'";';
		}
		include MINI_PATH.'public/message.php';
		exit();
	}
	
	 /**
	 * 用户登录
	 * @param string $username
	 * @param string $password
	 * @param string $imgcode
	 */
	public static function login($username,$password,$imgCode){
		if ( strcasecmp($_SESSION['ImgCode'], $imgCode) )
			self::printMessage('验证码输入不正确！','login.php');
		unset($_SESSION['ImgCode']);
		$pdo = new MySQLPDO();
		$sql = 'SELECT AdminId,UserName,NickName,RoleId FROM Mini_Admin WHERE UserName=? AND Password=? limit 1';
		$params = array($username,md5(md5($password)));
		$adminObjArray = $pdo->getObjectArray($sql, $params, 'Mini_Admin');
		$pdo->close();
		if ($adminObj = $adminObjArray[0]){
			$_SESSION['UserId'] = $adminObj->adminid;
			$_SESSION['UserName'] = $adminObj->username;
			$_SESSION['md5'] = md5($adminObj->username);
			$_SESSION['NickName'] = $adminObj->nickname;
			$_SESSION['RoleId'] = $adminObj->roleid;
			setcookie('UserName',$_SESSION['UserName'],time()+3600*24*7);
			self::printMessage('恭喜您登录成功！','index.php');
		}else{
			self::printMessage('用户名或密码错误！','login.php');
		}
	}
	
	/**
	 * 检测用户是否登录
	 */
	public static function checkLogin(){
		if (empty($_SESSION['UserName'])){		
			self::printMessage('您尚未登录，请先登录！','login.php');
		}else if(md5($_SESSION['UserName']) != $_SESSION['md5']) {
			unset($_SESSION['UserName']);
			self::printMessage('账户匹配失败！，请重新登录！','login.php');
		}	
	}
	
	/**
	 * 获取栏目的所有子栏目(返回option标签字符串)
	 * @param int $classId 
	 * @param string $letterSpace 
	 * @return string $options
	 */
	public static function getSubClass($classId = 0,$letterSpace = ''){
		$pdo = new MySQLPDO();
		$sql = 'SELECT ClassId,ClassName FROM Mini_Class WHERE ParentId=?';
		$classArray = $pdo->selectSQL($sql, array($classId));	
		foreach ($classArray as $class){
			$options .= '<option value="'.$class['classid'].'">'.$letterSpace.$class['classname'].'</option>';
			$options .= self::getSubClass($class['classid'],'——'.$letterSpace);		
		}	
		return $options;
	}
	
	/**
	 * 获取对应表中的模板内容
	 * @param string $tableName 模板表的名称
	 * @param int $tempId
	 * @return array
	 */
	static function getTempText($tableName,$tempId){
		$pdo = new MySQLPDO();
		$sql = 'SELECT TempText FROM '.$tableName.' WHERE TempId=?';				
		$tempArray = $pdo->selectSQL($sql, array($tempId));
		if (empty($tempArray)){
			exit($tableName.'表中不存在TempId为'.$tempId.'的数据！');			
		}
		return $tempArray[0]['temptext'];
		
	}
	
	static function getClassList($page,$nums){
		$pdo = new MysqlPDO(); 
		$sql = 'select c.ClassId,c.ClassName,c.ClassDir,t.TempName ClassTempName,p.TempName PageTempName   from mini_class c,mini_classtemp t,mini_pagetemp p where c.ClassTempId=t.TempId and c.PageTempId=p.TempId limit '.$page.','.$nums;
		$classArray = $pdo->selectSQL($sql);
		$pdo->close();
		return $classArray;
	}
	
	/**
	 * 获取网站首页模板内容
	 */
	static function getMiniHome(){
		unset($_POST);
		$pdo = new MysqlPDO();
		$sql = 'SELECT VarText FROM Mini_VarTemp WHERE VarName=? limit 1';
		$homeArray = $pdo->selectSQL($sql,array('Mini_Home'));
		$pdo->close();
		return $homeArray ? $homeArray[0]['vartext'] : 'null';	
	}
	
	/**
	 * 根据栏目路径和文件名生成对应的URL
	 * （不包括http://协议头）
	 * @param string $classDir
	 * @param string $fileName
	 */
	static function generateURL($classDir,$fileName){
		return Mini::URL.$classDir.'/'.$fileName.'.html';	
	}
	
	/**
	 * 更改栏目或者文章的IsUpdate状态<br/>
	 * 只有栏目ID和文章ID中的任何一个，更新对应栏目或文章<br/>
	 * 否则更新所有栏目
	 * @param int $classId 栏目ID
	 * @param int $pageId 文章ID
	 * @param bit $isUpdate 0或1
	 */
	static function setIsUpdate($classId, $pageId, $isUpdate){
		$pdo = new MySQLPDO();
		if ($classId && empty($pageId)){
			//有栏目ID、无文章ID => 更新对应栏目		
			$update = 'UPDATE Mini_Class SET IsUpdate='.$isUpdate.' WHERE ClassId='.$classId;		
		}else if (empty($classId) && $pageId){
			//无栏目ID、有文章ID => 更新对应文章
			$update = 'UPDATE Mini_Page SET IsUpdate='.$isUpdate.' WHERE PageId='.$pageId;
		}else{
			//更新所有栏目
			$update = 'UPDATE Mini_Class SET IsUpdate='.$isUpdate;
		}	
		$pdo->changeSQL($update);
		$pdo->close();
	}
	
	/**
	 * 获取模板下拉option列表
	 * @param string $tableName
	 * @param int $tempId 无此参数，则获取所有模板
	 */
	static function getSubTemp($tableName,$tempId = 0){
		$pdo = new MySQLPDO();
		$sql = 'SELECT TempId,TempName FROM '.$tableName;
		if ($tempId > 0)
			$sql .= ' WHERE TempId='.$tempId;
		$tempArray = $pdo->selectSQL($sql);
		$pdo->close();
		if ($tempArray){
			foreach ($tempArray as $temp){
				$options.='<option value="'.$temp['tempid'].'">'.$temp['tempname'].'</option>';
			}		
		}
		return $options;
	}

	/**
	 * 获取栏目的相对路径(以/结尾)<br/>
	 * 已构建静态缓存
	 * @param int $classId
	 */
	static function getClassPath($classId){
		static $staticClassPathArray = array();
		if ($staticClassPathArray[$classId]){
			return $staticClassPathArray[$classId];
		}
		$pdo = new MySQLPDO();
		while ($classId > 0){
			$classArray = $pdo->selectSQL('SELECT ClassDir,ParentId FROM Mini_Class WHERE ClassId=? limit 1',array($classId));
			$path = $classArray[0]['classdir'].'/'.$path;
			$classId = $classArray[0]['parentid'];
		}
		$staticClassPathArray[$classId] = $path;
		return $path;	
	}
}





